library(dplyr)                                
library(car)                                
library(rstatix)                                
library(emmeans)
library(ggplot2)
library(knitr)
library(kableExtra)
library(htmltools)

0.1 Roteiro

1. Vá ao Repositório de Dados Eleitorais do TSE. Na página “Resultados” e no ano 2012, faça o download do arquivo “Votação nominal por município e zona” e descompacte-o.

2. Abre o arquivo para São Paulo (votacao_candidato_munzona_2012_SP.txt) em R com os nomes de colunas e o encoding corretos de acordo com a seção relevante de leaime.pdf.

library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v tibble  3.1.6     v purrr   0.3.4
## v tidyr   1.1.4     v stringr 1.4.0
## v readr   2.1.1     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x rstatix::filter()        masks dplyr::filter(), stats::filter()
## x kableExtra::group_rows() masks dplyr::group_rows()
## x dplyr::lag()             masks stats::lag()
## x car::recode()            masks dplyr::recode()
## x purrr::some()            masks car::some()
data <- read_delim("C:/Users/aluga.com/Documents/portifolio/atividade_1/votacao_candidato_munzona_2012_SP.txt",
                   delim=";",
                   locale=locale(encoding="latin1"),
                   col_names=c("DATA_GERACAO","HORA_GERACAO","ANO_ELEICAO","NUM_TURNO",
                               "DESCRICAO_ELEICAO","SIGLA_UF","SIGLA_UE",
                               "CODIGO_MUNICIPIO","NOME_MUNICIPIO","NUMERO_ZONA",
                               "CODIGO_CARGO","NUMERO_CAND","SQ_CANDIDATO",
                               "NOME_CANDIDATO","NOME_URNA_CANDIDATO","DESCRICAO_CARGO",
                               "COD_SIT_CAND_SUPERIOR","DESC_SIT_CAND_SUPERIOR",
                               "CODIGO_SIT_CANDIDATO","DESC_SIT_CANDIDATO",
                               "CODIGO_SIT_CAND_TOT","DESC_SIT_CAND_TOT",
                               "NUMERO_PARTIDO","SIGLA_PARTIDO","NOME_PARTIDO",
                               "SEQUENCIAL_LEGENDA","NOME_COLIGACAO",
                               "COMPOSICAO_LEGENDA","TOTAL_VOTOS"))
## Rows: 182932 Columns: 29
## -- Column specification --------------------------------------------------------
## Delimiter: ";"
## chr  (14): DATA_GERACAO, DESCRICAO_ELEICAO, SIGLA_UF, NOME_MUNICIPIO, NOME_C...
## dbl  (14): ANO_ELEICAO, NUM_TURNO, SIGLA_UE, CODIGO_MUNICIPIO, NUMERO_ZONA, ...
## time  (1): HORA_GERACAO
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.

3. Lendo o leaime.pdf e observando as variáveis no banco de dados, o que representa uma observação (uma linha)? Ou seja, qual a unidade de análise aqui?

Cada linhha é o resultado da eleição para um candidato em uma zona eleitoral específico em um turno na eleição de 2012 em São Paulo.

4. Leia até o final as instruções e identifique quais variáveis serão necessárias para o resto do exercício. Tire do seu banco de dados as variáveis desnecesárias.

data <- data %>% 
  select(NUM_TURNO, NOME_CANDIDATO, DESC_SIT_CAND_TOT, NOME_URNA_CANDIDATO, SQ_CANDIDATO,
         CODIGO_MUNICIPIO, NOME_MUNICIPIO, NUMERO_ZONA, SIGLA_PARTIDO, 
         TOTAL_VOTOS, DESCRICAO_CARGO, NUMERO_CAND, NUMERO_PARTIDO)

5. Selecione apenas as linhas que contém resultados eleitorais para o primeiro turno da eleição do prefeito(a).

data_prefeito_turno_1 <- data %>% filter(DESCRICAO_CARGO=="PREFEITO" & NUM_TURNO==1)
data_prefeito_turno_1

6. Note que candidatos podem aparecer mais de uma vez na tabela em Q5 (porque existem múltiplas zonas em cada município). Usando identificadores únicos, identifique os candidatos distintos para o primeiro turno do prefeito. Explique no seu relatório quantos candidatos concorrem para prefeito no primeiro turno em 2012.

cands_prefeito_turno_1 <- data_prefeito_turno_1 %>% distinct(SQ_CANDIDATO)
num_cands_prefeito_turno_1 <- nrow(cands_prefeito_turno_1)

O número de candidatos que concorrem para prefeito no primeiro turno em 2012 em São Paulo é `r num_cands_prefeito_turno_1`.

O número de candidatos que concorrem para prefeito no primeiro turno em 2012 em São Paulo é 2035.

7. No banco de dados de prefeitos no primeiro turno gerado na questão anterior, renomeie a variável com nome pouco claro DESC_SIT_CAND_TOT para RESULTADO

data_prefeito_turno_1 <- data_prefeito_turno_1 %>% 
  rename(RESULTADO=DESC_SIT_CAND_TOT)

8. No banco de dados de prefeitos no primeiro turno gerado na questão anterior, filtrar os dados para os candidatos que se candidataram com Nome de Urna ígual ao seu Nome completo, e identifique os candidatos únicos de novo. No seu relatório, explique qual porcentagem de todos os candidatos para prefeito no primeiro turno isso representa.

cands_prefeito_turno_1_nome_igual <- data_prefeito_turno_1 %>% 
  filter(NOME_CANDIDATO==NOME_URNA_CANDIDATO) %>%
  distinct(SQ_CANDIDATO)
Pct_nome_igual <- 100*(nrow(cands_prefeito_turno_1_nome_igual)/nrow(cands_prefeito_turno_1))

O porcentagem de candidatos para prefeito no primeiro turno com nome completo ígual ao nome de urna é `r round(Pct_nome_igual,2)`.

O porcentagem de candidatos para prefeito no primeiro turno com nome completo ígual ao nome de urna é 5.7%.

9. Quantos dos candidatos identificados em Q8 foram eleitos no primeiro turno?

num_cands_nome_igual_eleito <- data_prefeito_turno_1 %>% 
  filter(NOME_CANDIDATO==NOME_URNA_CANDIDATO) %>% 
  filter(RESULTADO=="ELEITO") %>%
  distinct(SQ_CANDIDATO) %>% 
  nrow()

Dos `r nrow(cands_prefeito_turno_1_nome_igual)` candidatos com nome completo ígual ao nome de urna, `r num_cands_nome_igual_eleito` foram eleitos.

Dos 116 candidatos com nome completo ígual ao nome de urna, 39 foram eleitos.

10. Voltando para os dados de todos os candidatos no primeiro turno, vamos focar a nossa análise no município de São Paulo (código do TSE 71072). Ordene os dados por número de votos e identifique qual candidato recebeu o maior número de votos em qualquer zona da cidade.

data_prefeito_turno_1 %>% filter(CODIGO_MUNICIPIO==71072) %>%
  arrange(-TOTAL_VOTOS) %>%
  top_n(1, TOTAL_VOTOS)

O candidato para prefeito com a maior votação em uma zona no município de São Paulo no primeiro turno de 2012 é José Serra.

11. Usando a sua própria classificação, crie uma nova variável que descreve a ideologia de cada partido no banco de dados do município de São Paulo nas três categorias ‘Esquerda’, ‘Direita’ e ‘Outro’.

data_prefeito_turno_1 <- data_prefeito_turno_1 %>% 
  filter(CODIGO_MUNICIPIO==71072) %>% 
  mutate(Ideologia=case_when(SIGLA_PARTIDO %in% c("PDT","PV","PSOL","PTN",
                                                  "PT","PPS","PTB","PSB",
                                                  "PC do B","PT do B","PSTU",
                                                  "PCB","PPL","PCO","SD")~"Esquerda",
                             SIGLA_PARTIDO %in% c("PSD","PSDB","PRB","PRP",
                                                  "PMDB","DEM","PSC","PP",
                                                  "PRTB","PHS","PSL","PTC")~"Direita",
                             SIGLA_PARTIDO %in% c("PR","PMN","PT do B","PSDC")~"Outro"))

12. Crie uma variável que indica se o candidato no município de São Paulo recebeu mais de 10.000 votos na zona.

data_prefeito_turno_1 <- data_prefeito_turno_1 %>% 
  filter(CODIGO_MUNICIPIO==71072) %>%
  mutate(Mais_de_10000_votos=case_when(TOTAL_VOTOS>10000~TRUE,
                                       TOTAL_VOTOS<=10000~FALSE))
cands_sp_maior_10000 <- data_prefeito_turno_1 %>% filter(Mais_de_10000_votos==TRUE) %>% nrow()

Existem `r cands_sp_maior_10000` candidatos-zonas com mais de 10000 votos.

Existem 223 candidatos-zonas com mais de 10000 votos.

13. Voltando para os dados orginais, filtrar para os dados dos vereadores. Agora, imagine que não temos os dados do partido de cada candidato e queremos recuperar do NUMERO_CAND, em que os primeiros dois digitos sempre refletem o número do partido do candidato. Divida a coluna NUMERO_CAND em duas para criar uma coluna de NUM_PARTIDO e outra de NUM_CAND_RESTANTE.

data_vereador <- data %>% filter(DESCRICAO_CARGO=="VEREADOR") %>%
  separate(NUMERO_CAND, into=c("NUM_PARTIDO","NUM_CAND_RESTANTE"), sep=2)
data_vereador

14. Agora, unifique as colunas NUM_PARTIDO e NUM_CAND_RESTANTE criado em Q9. O resultado deve ser ígual à coluna original NUMERO_CAND.

data_vereador <- data_vereador %>% 
  unite(NUMERO_CAND_NOVO,c(NUM_PARTIDO,NUM_CAND_RESTANTE))
data_vereador